/**
 * 页面权限检查混入
 * 为页面提供权限验证功能
 */

const { hasPermission, getUserType, getRoleName, logPermission } = require('./permission.js');

const pagePermissionMixin = {
  /**
   * 页面权限检查
   * @param {string} requiredModuleId 需要的模块权限ID
   * @param {Object} options 选项
   * @param {boolean} options.redirectOnFail 权限不足时是否跳转到首页，默认true
   * @param {string} options.failMessage 权限不足时的提示信息
   * @returns {boolean} 是否有权限
   */
  checkPagePermission(requiredModuleId, options = {}) {
    const {
      redirectOnFail = true,
      failMessage = '您没有权限访问此页面'
    } = options;

    const userType = getUserType();
    const hasAccess = hasPermission(requiredModuleId);

    // 记录权限检查日志
    logPermission('页面权限检查', requiredModuleId, hasAccess);

    if (!hasAccess) {
      wx.showToast({
        title: failMessage,
        icon: 'none',
        duration: 2000
      });

      if (redirectOnFail) {
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/workbench/workbench',
            fail: () => {
              wx.reLaunch({
                url: '/pages/workbench/workbench'
              });
            }
          });
        }, 2000);
      }

      return false;
    }

    return true;
  },

  /**
   * 在页面onLoad中调用，进行权限预检查
   * @param {string} requiredModuleId 需要的模块权限ID
   */
  onPageLoadPermissionCheck(requiredModuleId) {
    // 延迟检查，确保用户信息已加载
    setTimeout(() => {
      this.checkPagePermission(requiredModuleId);
    }, 100);
  },

  /**
   * 检查功能权限（页面内的特定功能）
   * @param {string} moduleId 模块ID
   * @param {string} featureName 功能名称（用于日志）
   * @returns {boolean} 是否有权限
   */
  checkFeaturePermission(moduleId, featureName = '未知功能') {
    const hasAccess = hasPermission(moduleId);
    logPermission('功能权限检查', featureName, hasAccess);

    if (!hasAccess) {
      wx.showToast({
        title: '您没有权限使用此功能',
        icon: 'none'
      });
    }

    return hasAccess;
  },

  /**
   * 获取当前用户信息摘要
   * @returns {Object} 用户信息摘要
   */
  getCurrentUserSummary() {
    const userType = getUserType();
    return {
      userType,
      roleName: getRoleName(userType),
      isEmployee: userType === 1,
      isLeader: userType === 2,
      isWarehouse: userType === 3
    };
  }
};

module.exports = pagePermissionMixin; 